package com.neusoft.hifly.core.utils;

import java.io.File;
import java.io.FileNotFoundException;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ResourceUtils;

import com.neusoft.hifly.commons.lang.StringUtil;
import com.neusoft.hifly.core.log.Log;

/**
 * Title: 核心类库
 * <p>
 * Description: 后台工具类
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
public final class GlobalConstants {

	/**
	 * 系统字符集 UTF-8
	 */
	public static final String SYSTEM_UNCODE = "UTF-8";

	/**
	 * feign接口错误信息
	 */
	public static final String FEIGN_ERROR = "接口暂时不可用!";

	/**
	 * 默认首页
	 */
	public static final int PAGE_OFFSET = 1;

	/**
	 * 默认分页
	 */
	public static final int PAGE_LIMIT = 20;
	// ****************************** 普通自定义查询管理模块常量 **************************

	/**
	 * 根
	 */
	public static final String ITEM_BASE = "base";

	/**
	 * 管理员
	 */
	public static final String ABS_ADMIN_NAME = "管理员";

	/**
	 * 管理员登录名
	 */
	public static final String ABS_ADMIN = "admin";

	/**
	 * 绝对根名称 root
	 */
	public static final String ABS_NAME = "root";

	/**
	 * 初始化id
	 */
	public static final long ABS_ID = 0;

	// ###################### 数据库字段类型  ############################

	/**
	 * 系统版本号版本 Base("Base"), Alpha("Alpha"), Beta("Beta"), Release_Candidate("RC"), Release("")
	 */
	public static final String SYS_VERSION = "[{label: 'Base', data: 'Base'},"
			+ " {label: 'Alpha', data: 'Alpha'}, {label: 'Beta', data: 'Beta'}, "
			+ "{label: 'Release Candidate', data: 'RC'}, {label: 'Release', data: ''}]";

	/**
	 * 数据库类型
	 */
	public static final String[] DATA_BASE_TYPE = new String[] { "MySQL", "Oracle", "SQLServer" };

	/**
	 * 字符集
	 */
	public static final String[] CHARSET = new String[] { "", "UTF-8", "GBK", "GB2312", "ISO-8859-1", "UTF-16",
			"UNICODE" };

	// ******************************配置文件路径**************************
	/**
	 * 附件路径
	 */
	public static final String FILE_PATH = "files";

	/**
	 * 存储其他临时文件（该文件夹作为导入、导出等临时文件存储，可以按照时间段删除垃圾数据）
	 */
	public static final String TEMP_PATH = GlobalConstants.FILE_PATH + File.separator + "temp";

	/**
	 * 日志文件备份目录（相对于webroot）
	 */
	public static final String LOG_BACKUP_PATH = GlobalConstants.FILE_PATH + File.separator + "backup" + File.separator
			+ "logs";

	/**
	 * Excel模版版本号：错误日志列表信息
	 */
	public static final String EXCEL_VERSION_ERRORLOG = "错误日志列表信息V1.0";

	/**
	 * 取得当前主机存放项目的绝对路径
	 *
	 * @return 绝对路径
	 */
	public static String getWebAppRoot() {
		String path = GlobalConstants.getWebClassesPath();
		if (path.indexOf("WEB-INF") > 0) {
			path = path.substring(0, path.indexOf("WEB-INF/classes"));
		} else {
			Log.error("路径获取错误");
		}
		return path;
	}

	/**
	 * 获取到WEB-INF/classes下
	 *
	 * @return WEB-INF/classes 目录
	 */
	public static String getWebClassesPath() {
		//Class文件所在路径
		// 将有空格的目录获取是将空格替换成%20了，这里需要替换回来 @lihui 2013-9-4
		return StringUtils.replace(Thread.currentThread().getContextClassLoader().getResource("").getPath(), "%20",
				" ");
	}

	/**
	 * 取得classpath绝对路径
	 *
	 * @return 绝对路径
	 */
	public static String getClasspath() {
		try {
			return ResourceUtils.getURL("classpath:").getPath();
		} catch (final FileNotFoundException e) {
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * 按中国习惯，星期一到星期日编号依次为1,2,3,4,5,6,7
	 *
	 * @param dayOfWeek
	 *            传入的为Calendar字段数值。
	 * @return 序号
	 */
	public static String getWeekName(final String theWeek) {
		switch (theWeek) {
			case "0":
				return "每天";
			case "1":
				return "星期一";
			case "2":
				return "星期二";
			case "3":
				return "星期三";
			case "4":
				return "星期四";
			case "5":
				return "星期五";
			case "6":
				return "星期六";
			case "7":
				return "星期日";
		}
		return "";
	}

	/**
	 * 字符串转码
	 *
	 * @param str
	 *            字符串
	 * @return 转码
	 */
	public static String encode(final String str) {
		if (StringUtils.isEmpty(str)) {
			return str;
		}
		return StringUtil.encode(str, GlobalConstants.SYSTEM_UNCODE);
	}

	/**
	 * 字符串转码
	 *
	 * @param str
	 *            字符串
	 * @return 转码
	 */
	public static String decode(final String str) {
		if (StringUtils.isEmpty(str)) {
			return str;
		}
		return StringUtil.decode(str, GlobalConstants.SYSTEM_UNCODE);
	}
}
